unity shader 人物走入草丛,草的晃动特效特效怎么做? |
您所在的位置:网站首页 › unity mesh 法线 › unity shader 人物走入草丛,草的晃动特效特效怎么做? |
在游戏中,草丛可以增加游戏的真实感,但是如果草丛没有动态效果,会使得游戏显得很生硬。因此,在游戏中,我们需要给草丛添加动态效果,让草丛随着人物的移动而摇曳起来。本文将介绍如何使用Unity Shader来实现人物走入草丛,草的晃动特效。 一、草丛模型的制作 首先,我们需要制作草丛的模型。在Unity中,我们可以使用Unity自带的草丛模型,也可以使用第三方模型。如果使用Unity自带的草丛模型,可以在菜单栏中选择GameObject->3D Object->Grass进行创建。如果使用第三方模型,需要将模型导入到Unity中。 二、草丛材质的制作 接下来,我们需要为草丛创建材质。在Unity中,材质是决定物体外观的重要因素之一。我们可以使用Unity自带的材质,也可以自己创建材质。在本例中,我们将创建一个新的材质。 创建新材质 在Unity中,我们可以在Project面板中右键点击空白处,选择Create->Material来创建新材质。 编辑材质 在Inspector面板中,我们可以编辑材质的属性。在本例中,我们需要编辑以下属性: (1)Diffuse:设置草丛的颜色。 (2)Normal Map:设置草丛的法线贴图,用于模拟草丛的凹凸感。 (3)Alpha Cutoff:设置草丛的透明度,用于控制草丛的密度。 (4)Transparency:设置草丛的透明度,用于控制草丛的透明度。 三、草丛的晃动特效实现 在上面的两个步骤中,我们已经完成了草丛模型和材质的制作。接下来,我们需要使用Shader来实现草丛的晃动特效。 编写Shader 在Unity中,我们可以使用Shader来实现草丛的晃动特效。Shader是一种用于渲染3D图形的程序,它可以控制物体的外观和动态效果。在本例中,我们将使用Shader来实现草丛的晃动特效。 首先,我们需要创建一个新的Shader。在Unity中,我们可以在Project面板中右键点击空白处,选择Create->Shader来创建新Shader。 然后,我们需要编辑Shader的代码。在本例中,我们将使用Unity自带的Standard Shader作为基础,然后在其基础上添加草丛的晃动特效。下面是Shader的代码: Shader "Custom/GrassShader"{ Properties{ _MainTex("Texture", 2D) = "white" {} _BumpMap("Normal Map", 2D) = "bump" {} _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 _Transparency("Transparency", Range(0.0, 1.0)) = 1.0 _WaveAmplitude("Wave Amplitude", Range(0.0, 1.0)) = 0.1 _WaveFrequency("Wave Frequency", Range(0.0, 10.0)) = 1.0 _WindDirection("Wind Direction", Vector) = (1, 1, 0) _WindSpeed("Wind Speed", Range(0.0, 10.0)) = 1.0 } SubShader{ Tags{ "RenderType"="Opaque" } LOD 100 CGPROGRAM #pragma surface surf Standard #pragma target 3.0 . sampler2D _MainTex; sampler2D _BumpMap; float _Cutoff; float _Transparency; float _WaveAmplitude; float _WaveFrequency; float3 _WindDirection; float _WindSpeed; struct Input{ float2 uv_MainTex; float2 uv_BumpMap; float3 worldPos; float3 worldNormal; float3 worldTangent; float3 worldBinormal; float3 worldViewDir; }; void surf(Input IN, inout SurfaceOutputStandard o){ // Diffuse o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb; // Normal o.Normal = UnpackNormal(tex2D(_BumpMap, IN.uv_BumpMap)); // Alpha clip(o.Albedo.a - _Cutoff); // Transparency o.Alpha = _Transparency; // Wave float3 windDir = normalize(_WindDirection); float3 windVec = windDir * _WindSpeed; float3 worldPos = IN.worldPos; float3 offset = worldPos.xz * _WaveFrequency; float wave = _WaveAmplitude * (sin(dot(offset, windVec)) + 1) / 2; worldPos.y += wave; IN.worldPos = worldPos; // Lighting o.Metallic = 0; o.Smoothness = 0.5; o.Emission = 0; } ENDCG } FallBack "Diffuse" } 解析Shader 上面的Shader代码中,我们定义了以下属性: (1)_MainTex:草丛的颜色贴图。 (2)_BumpMap:草丛的法线贴图。 (3)_Cutoff:草丛的透明度。 (4)_Transparency:草丛的透明度。 (5)_WaveAmplitude:草丛的晃动幅度。 (6)_WaveFrequency:草丛的晃动频率。 (7)_WindDirection:草丛的风向。 (8)_WindSpeed:草丛的风速。 在surf函数中,我们实现了以下功能: (1)Diffuse:设置草丛的颜色。 (2)Normal:设置草丛的法线贴图。 (3)Alpha:控制草丛的透明度。 (4)Transparency:控制草丛的透明度。 (5)Wave:实现草丛的晃动特效。 (6)Lighting:设置草丛的光照效果。 草丛的晃动特效实现 在Shader中,我们使用了sin函数来实现草丛的晃动特效。sin函数可以产生周期性的波形,我们可以通过改变参数来控制波形的幅度和频率。 草丛的晃动特效需要受到风向和风速的影响。我们可以通过改变_WindDirection和_WindSpeed来控制风向和风速。 四、示例 在本例中,我们将使用Unity自带的草丛模型,创建一个新的材质,并使用上面的Shader来实现草丛的晃动特效。 创建新材质 在Unity中,我们可以在Project面板中右键点击空白处,选择Create->Material来创建新材质。 编辑材质 在Inspector面板中,我们可以编辑材质的属性。在本例中,我们需要编辑以下属性: (1)Diffuse:设置草丛的颜色。 (2)Normal Map:设置草丛的法线贴图。 (3)Alpha Cutoff:设置草丛的透明度,用于控制草丛的密度。 (4)Transparency:设置草丛的透明度,用于控制草丛的透明度。 创建Shader 在Unity中,我们可以在Project面板中右键点击空白处,选择Create->Shader来创建新Shader。 然后,我们需要编辑Shader的代码。在本例中,我们将使用上面的Shader代码。 将Shader应用到材质中 将Shader应用到材质中,我们需要在材质的Inspector面板中选择Shader。在本例中,我们选择Custom/GrassShader。 将材质应用到草丛模型中 将材质应用到草丛模型中,我们需要在Scene面板中选择草丛模型,然后将材质拖拽到Mesh Renderer组件的Material属性中。 测试效果 在Scene视图中,我们可以看到草丛已经具有了晃动特效。我们可以通过改变_WaveAmplitude和_WaveFrequency来控制草丛的晃动幅度和频率。我们也可以通过改变_WindDirection和_WindSpeed来控制风向和风速。 本文教程就到这里了,欢迎加入我的简介游戏开发学习交流群~ |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |